home *** CD-ROM | disk | FTP | other *** search
Text File | 2002-07-18 | 71.7 KB | 2,170 lines |
- #--------------------------------------------------------------------
- #
- # /nomads/scripts/commands.tcl
- #
- # NOMADS DEMO KOMMANDOS
- #
- # Wird vom Standard-Demo ben÷tigt und implementiert wichtige
- # vom Demo ben÷tigte Routinen, wie NEWV, etc., die jedoch
- # nicht von den Standard-Viewern ben÷tigt werden.
- #
- # created: 09-Apr-99
- # upd.: 08-Jun-99
- # 16-Jun-99 floh neues Kommando 'sessions', Anpassungen an neue Welt:
- # 18-Jun-99 bernd bugfixes
- # 19-Jun-99
- # 21-Jun-99 floh + "<error>" ersetzt durch "null"
- # 05-Jul-99
- # 24-Aug-99 bernd AufgerΣumt (ⁿberflⁿssige Routinen raus) watch_next / watch_prev jetzt auch mit "feindlichen" Fahrzeugen
- # 15-Sep-99 bernd Demo Wegpunktlisten auf neues Format geΣndert, WegPunktRekorder
- # 16-Sep-99 bernd KILL ME jezze per releasevehicle
- # 29-Sep-99 bernd Steinhagel neu
- # 21-Okt-99 bernd Neue Teststation
- # 25-Okt-99 bernd bugfix: Viewer Watch/Follow auf neuesten Stand gebracht
- # 26-Okt-99 bernd bugfix: handkontrolle funktioniert auch im Watch Mode wieder korrekt
- # 11-Nov-99 bernd GAGA ! Artefakte
- # 25-Nov-99 bernd Neue Visualizer eingebaut
- # 26-Nov-99 bernd Neue Routinen fⁿrs neue InputMapping: jumptovehicle, leavevehicle, clanof
- # 30-Nov-99 bernd Weiter am neuen InputMapping: control_current
- # 02-Dec-99 bernd Weiter am neuen Input Mapping:Exception Handling fⁿr Explosionen
- # 09-Dec-99 bernd fx_appear / Bugfixing und Details in leavevehicle und jumptovehicle
- # 13-Dec-99 bernd neue Station -> Landschaftsrenderer.
- # 17-Dec-99 bernd fx routine verbessert
- # 20-Dec-99 floh neue Record-Input-Routinen: start_recording, stop_recording,
- # start_playing
- # ------- Millenium --------
- # 03-Jan-2000 bernd Screenshot
- # 08-Jan-2000 bernd jumptovehicle aufgebohrt - hei▀t jetzt ACTION
- # watchvehicle Routine
- # 13-jan-2000 bernd Die Hilfe Routine vorbereitet. Bugfix beim Aufrufen von
- # 14-jan-2000 Leaveehicle / noch mehr Hilfe
- # 20-Jan-2000 bernd Die globale Variable me gekillt, weil das nicht ⁿber das Netz funktioniert hat,
- # und durch Clan-Funktionen ersetzt.
- # watch_next und watch_prev eleminiert
- # - watch_own verΣndert nicht mehr das aktuelle SEL
- # 24-Jan-2000 bernd SHOW_LOADSCREEN / REMOVE_LOADSCREEN
- # 27-Jan-2000 bernd ESCAPE
- # 28-Jan-2000 bernd ADDARTEFACT / REMARTEFACT
- # 29-Jan-2000 bernd Springen zu Bauwerken
- # 31-Jan-2000 bernd FINAL TWEAKING
- # ----------------------------------------------------------------------------publdemo1
- # 01-Feb-2000 bernd Handkontrolle konnte nach dem 2. Jump in vhcl nicht korrekt ⁿbernommen werden
- # 02-Feb-2000 bernd FAST / SLOW wieder eingebaut einige Netzwerk unsichere Funktionen gesichert-
- # 03-Feb-2000 bernd mehr Sicherheitsabfragen
- # unbenutze Funktionen gekillt getnext/prevclan xfollow xwatch
- # 04-Feb-2000 bernd SCHATTENJOHNS haben noch auf anderen Rechnern das Artefakt Menⁿ an und ausgeschaltet
- # 14-Mrz-2000 bernd daytime Anzeige
- # 15-Mrz-2000 bernd alignvehicle vereinfacht vieles
- # 20-Mrz-2000 bernd placecontainer wieder reingenommen
- # 28-Mrz-2000 bernd get_num_elements / get_index
- # 12-Apr-2000 bernd Energie Balken
- # 26-Apr-2000 af allinone-Tcl Ubergangsweise fuer tests
- # 01-Mai-2000 af allinone-Tcl nun separat clist_lib und statewatch-
- # Scripts
- # 21-Jun-2000 bernd johnfall + johnfallstop
- # 25-Jun-2000 bernd SPELL
- # 28-Jun-2000 bernd WATCH FINETUNE
- # 10-Jun-2000 bernd DER MONTAG NACH DER LOVEPARDE : Beamen kostet
- #-------------------------------------------------------------------------------------PUBLDEMO2
- # 25-Jul-2000 bernd Sicherheitsabfrage bei Johnfallstop
- # 09-Aug-2000 floh johnfall und johnfallstop vereinfacht, so dass
- # nicht mehr an der Engine rumgefummelt wird, sondern
- # am Maennel-Object selbst
- # 21-Aug-2000 bernd neuer Visualisierungsmode fⁿr Collissions-Objekte
- # 29-Aug-2000 bernd Current Quickspell wird jetzt angezeigt
- # 18-Oct-2000 bernd Der HomeButton wurde eingefⁿhrt.
- # 20-Oct-2000 bernd infotext
- # 26-Oct-2000 bernd infotext wird zu basaltface
- # 09-Nov-2000 jeremy +source of commands_leveldesign.tcl
- # 28-Nov-2000 floh alte nmatnode/nvbufnode Sachen ersetzt
- # 24-Sep-2001 floh reload Befehl fuer data.n Eintraege
- # 31-Oct-2001 bernd updatemaennelvalue / AufgerΣumt und alten Krempel gel÷scht
- # 07-Jan-2002 floh "usersymbolicname" Funktion, welche einem Objekt, so es
- # dem Player gehoert, den angegebenen Symbolicname gibt.
- # 25-Jan-02 floh debug proc: fillboostercharges
- # 18-Feb-02 floh debug proc: switch between chase and free viewer
- # 19-Feb-02 floh gameend_singleplayer proc which is called when the
- # lighthouse dies
- # 11-Apr-02 basti SelChapter und SoundEditor Script eingefⁿgt
- # 11-Jun-02 basti 1. check, damit tcl-lib nicht 2x geladen wird
- # 04-Jul-02 floh leavevehicle beachtet fastpossess Flag an Welt
- #
- # (C) 1999-2000 Bernd Beyreuther
- # (C) COPYRIGHT 2000,2001 RADONLABS GMBH
- #
- #--------------------------------------------------------------------
-
- source $nomads_home/scripts/commandlist_lib.tcl
- source $nomads_home/scripts/statewatch_scripts.tcl
-
- # GLOBALE VARIABLEN und INITIALISIERUNGEN --------------------------
- set timebase 0
- set vis 0
- set netstat 0
- set wetter 0
- set screenshotcounter 0
- set hilfe 0
- set feindclan "null"
- set uhr 0
- set tclload 1
-
- # ------------------
- #
- # DEBUG ROUTINE DIE DIE SKYBOX RICHTIG REIN SETZT
- #
- # ------------------
- proc skybox {} {
- puts "*** SKYBOX IST OBSOLETE ***"
- }
-
- #-------------------------------------------------------------------------------
- # lighthouse_killed
- #
- # Called by singleplayer lighthouse in explode state.
- #
- # If current object is the player's lighthouse:
- #
- # - connect viewer to island
- # - kill the player's island
- # - kills the maennel (this will also open the ingame_gameend menu
- #-------------------------------------------------------------------------------
- proc lighthouse_killed {} {
-
- # do this if single player only
- if {[/world.isnetsession] == "false"} {
-
- set userClan [/world.getuserclan]
-
- if {$userClan != "null"} {
-
- if {[.getclan] == $userClan} {
-
- set playerIsland [$userClan.getplayerisland]
-
- # connect viewer to island
- /world.setviewercarrier $playerIsland
-
- # kill maennel
- [$userClan.getmaennel].reduceenergy 1000000
- }
- }
- }
-
- # kill the island
- set island [.getparentvehicle]
-
- if {$island != "null"} {
- $island.reduceenergy [expr ([$island.getmaxenergy] + 10)]
- }
- }
-
- #-------------------------------------------------------------------------------
- # crash the island, but don't kill the player
- #-------------------------------------------------------------------------------
- proc lighthouse_removed {} {
-
- # kill the island
- set island [.getparentvehicle]
-
- if {$island != "null"} {
- $island.reduceenergy [expr ([$island.getmaxenergy] + 10)]
- }
- }
-
- #-------------------------------------------------------------------------------
- # fillboostercharges
- # Sets the number of booster charges of maennel to 20
- #-------------------------------------------------------------------------------
- proc fillboostercharges {} {
- set clan [/world.getuserclan]
- set maennel [$clan.getmaennel]
-
- $maennel.setcanfly true
- $maennel.setmaxboostcharges 20
- $maennel.setboostcharges 20
- }
-
- #-------------------------------------------------------------------------------
- # switchviewers
- # switch between chase and free viewer.
- #-------------------------------------------------------------------------------
- proc switchviewers {} {
- set curViewer [/world.getviewer2]
- if {$curViewer == "/world/viewers/chaseviewer"} {
- /world.setviewer2 "/world/viewers/freeviewer"
- /world.sethandcontrol "null"
- } else {
- /world.setviewer2 "/world/viewers/chaseviewer"
- /world.sethandcontrol [[/world.getuserclan].getmaennel]
- }
- }
-
- #-------------------------------------------------------------------------------
- # usersymbolicname [symname]
- #
- # Testet, ob das aktuell selektierte Objekt dem Player gehoert, wenn ja wird
- # der per Arg definierte Symbolicname eingetragen. Diese Routine wird von den
- # Statewatcher-Scripts aufgerufen (meistens bei Gebaeuden), um neuen Objekten
- # nachdem sie der User gebaut hat, einen Standard-Symbolicname zu verpassen.
- #
- # 07-Jan-01 floh created
- #-------------------------------------------------------------------------------
- proc usersymbolicname {symname} {
- if {[.getclan] == [/world.getuserclan]} {
- .setsymbolicname $symname
- }
- }
-
- # -----------------------------------------------------------------------------------
- # VerΣndert Werte am Character
- # Diese Routine wird von Spells aufgerufen, die Werte setzen.
- # Wie z.B. Anzahl Slots hoch etc.
- #
- # FIXME: Mir ist nicht ganz klar... ob in einigen FΣllen das alles
- # korrekt abgespeichert wird.
- # z.B. setenergy / setmaxenergy...
- #
- # 04-Jul-02 floh tsatsatsa wer hat denn diese Routine geschrieben?
- # anstatt tausendmal [[/world.getuserclan].getmaennel] zu machen
- # kann man's doch wirklich bisser effizienter haben!
- # -----------------------------------------------------------------------------------
- proc updatemaennelvalue { name value } {
- set maennel [[/world.getuserclan].getmaennel]
-
- switch $name {
- maxartefacts { $maennel.setmaxartefacts [expr [$maennel.getmaxartefacts] + $value] }
- distancetank { $maennel.setdistancetank [expr [$maennel.getdistancetank] + $value] }
- energy { $maennel.setenergy [expr [$maennel.getenergy] + $value] }
- default { puts "ERROR!!! scripts/commands.tcl: proc updatemaennelvalue unknown parameters !" }
- }
- }
-
- #-------------------------------------------------------------------------------
- # reload [data.n entry name]
- #
- # Reload the given data.n entry from disc, useful for testing
- # changes to the visual/audio prototype.
- #
- # 24-Sep-01 floh created
- #-------------------------------------------------------------------------------
- proc reload {entry} {
- global nomads_home
-
- if {[file exists $nomads_home/data.n/$entry]} {
-
- set nebcwd [psel]
- set fscwd [pwd]
- sel /data
-
- # delete existing data.n entry
- if {[exists $entry]} {
- delete $entry
- }
-
- # load new entry
- cd $nomads_home/data.n
- get $entry
-
- cd $fscwd
- sel $nebcwd
- } else {
- puts "Could not find data.n entry $entry"
- }
- }
-
- # -----------------------------------------------------------------------------------
- # DEBUG PROC
- # Gibt mir die Position des SpielerMΣnnels aus
- # created: Bernd
- # -----------------------------------------------------------------------------------
- proc wo { } {
- puts [[[/world.getuserclan].getmaennel].getposition]
- }
-
- # -----------------------------------------------------------------------------------
- # DEBUG PROC
- # Gibt mir die Position des SpielerMΣnnels relativ zum Parentvehicle aus
- # created: Andreas/Sylvius
- # -----------------------------------------------------------------------------------
- proc hier { } {
- set clan [/world.getuserclan]
- set maennel [$clan.getmaennel]
- set mpos [$maennel.getposition]
- set p [$maennel.getparentvehicle]
- set ppos [$p.getposition]
- set dx [expr [lindex $mpos 0] - [lindex $ppos 0]]
- set dy [expr [lindex $mpos 1] - [lindex $ppos 1]]
- set dz [expr [lindex $mpos 2] - [lindex $ppos 2]]
- puts "$dx $dy $dz"
- }
-
- # -----------------------------------------------------------------------------------
- # DEBUG PROC
- # Gibt mir eine schoene Grundaustattung an Artefakten
- # created: sylle
- # modified: bernd.d mehr artefakte, energyclots und hoehere versionen
- # -----------------------------------------------------------------------------------
- proc picnic { } {
- sel [[/world.getuserclan].getmaennel]
- setmaxartefacts 9
- news meta_navigationtower
- news meta_guntower03
- news meta_guntower03
- news meta_powerplant03
- news meta_scoutgarage
- news meta_silo03
- news ofen03
- news biggun
- news energyclotplus
- news energyclotplus
- news energyclotplus
- news energyclotplus
- news energyclotplus
- news energyclotplus
- news energyclotplus
- news energyclotplus
- }
-
- # -----------------------------------------------------------------------------------
- # DEBUG PROC
- # WΣhlt das SpielermΣnnel als aktuelles NebulaDirectory an
- # created: Bernd
- # -----------------------------------------------------------------------------------
- proc icke { } {
- sel [[/world.getuserclan].getmaennel]
- }
-
- # -----------------------------------------------------------------------------------
- # DEBUG PROC
- # Gibt mir Massenhaft Energie zum Bauen
- # -----------------------------------------------------------------------------------
- proc clanenergy {} {
- set clan [/world.getuserclan]
-
- set maximum [$clan.getcurrentmaximum]
- $clan.setcurrentenergy $maximum
-
- # maennel bis zum maximum auffuellen
- set maennel [$clan.getmaennel]
- set maximum [$maennel.getmaxenergy]
- $maennel.setenergy $maximum
- }
-
- # -----------------------------------------------------------------------------------
- # Geht durch alle clans und fⁿhrt auf alle Objekte (container) einen Befehl aus
- # -----------------------------------------------------------------------------------
- proc onall { befehl arg1 arg2 arg3 } {
- puts "*** onall IS OBSOLETE ***"
-
- # set cursel [psel]
- # foreach clan [ getallchilds /world/clans ] {
- # foreach objekt [ getallchilds $clan ] {
- # sel $objekt
- # $befehl $arg1 $arg2 $arg3
- # }
- # }
- # sel $cursel
- }
-
-
- #-------------------------------------------------------------------------------
- # Wird zur Zeit noch von den Input-Mapping-Routinen verwendet. Kann das raus?
- # (floh 04-Jul-02)
- #-------------------------------------------------------------------------------
- proc johnfall {} {
- if {[/world.getuserclan] != "null"} {
- set me [[/world.getuserclan].getmaennel]
- $me.setforcedfallflag true
- }
- }
-
- proc johnfallstop {} {
- if {[/world.getuserclan] != "null"} {
- set me [[/world.getuserclan].getmaennel]
- $me.setforcedfallflag false
- }
- }
-
-
- # -------------------------------------
- proc get_num_elements {} {
- puts "*** get_num_elements IS OBSOLETE ***"
-
- # set cur_dir [psel]
- # sel ..
- # set x [.gethead]
- # set counter 0
- # while {$x != "null"} {
- # sel $x
- # incr counter 1
- # set x [.getsucc]
- # }
- # sel $cur_dir
- # return $counter
- }
-
-
- # -------------------------------------
- proc get_index {} {
- puts "*** get_num_elements IS OBSOLETE ***"
-
- # set cur_dir [psel]
- # sel ..
- # set x [.gethead]
- # set counter 0
- # while { [.getfullname] != $cur_dir } {
- # sel $x
- # incr counter 1
- # set x [.getsucc]
- # }
- # sel $cur_dir
- # return $counter
- }
-
- # -------------------------------------------------------------------------
- # DAS IST EINE DEBUG ROUTINE, DIE IN DER DISTRIBUTIONS VERSION VON NOMADS
- # NICHT AUFGERUFEN WERDEN KANN, WEIL DAS GANZE TK ZEUX NICHT MITGELIEFERT
- # WIRD !
- # -------------------------------------------------------------------------
- proc p {} {
- puts "*** p IS OBSOLETE ***"
-
- #global home
- #global tcl_platform tclload
- # if {$tclload == 1} {
- # source $home/bin/loadtk.tcl
- # }
- # source $home/bin/place_container.tcl
- # plc
- #return
- }
-
- # -------------------------------------------------------------------------
- # DAS IST EINE DEBUG ROUTINE, DIE IN DER DISTRIBUTIONS VERSION VON NOMADS
- # NICHT AUFGERUFEN WERDEN KANN, WEIL DAS GANZE TK ZEUX NICHT MITGELIEFERT
- # WIRD !
- # -------------------------------------------------------------------------
- proc chapterselector {} {
- global home
- global tcl_platform tclload
- if {$tclload == 1} {
- source $home/bin/loadtk.tcl
- }
- source $home/bin/selchapter.tcl
- return
- }
-
- # -------------------------------------------------------------------------
- # DAS IST EINE DEBUG ROUTINE, DIE IN DER DISTRIBUTIONS VERSION VON NOMADS
- # NICHT AUFGERUFEN WERDEN KANN, WEIL DAS GANZE TK ZEUX NICHT MITGELIEFERT
- # WIRD !
- # -------------------------------------------------------------------------
- proc soundeditor {} {
- global home
- global tcl_platform tclload
- if {$tclload == 1} {
- source $home/bin/loadtk.tcl
- }
- source $home/bin/editsound.tcl
- return
- }
-
-
- # --------------------------------------------------------------------
- # 29-May-01 floh aufgeraeumt, war irgendwie abhaengig vom
- # aktuell ausgewaehlten Objekt (was aber so
- # oder so das "Maennel" sein muss!)
- # 24-May-02 peter weg damit, haha
-
- proc show_artefacts { } {
- puts "*** show_artefacts is obsolete!"
- }
- # return
- #
- # set me [[/world.getuserclan].getmaennel]
- #
- # if { ([$me.ismenuopen] =="false") && ([$me.isshadow] == "false") } {
- #
- # # delete the old artefacts
- # if [exists /world/gui/ainfo] { delete /world/gui/ainfo }
- #
- # sel /world/gui
- # new n3dnode ainfo
- # ainfo.txyz 6 -13 -20
- #
- # set maxa [$me.getmaxartefacts]
- # for { set i 1 } { $i <= $maxa } { incr i } {
- # new n3dnode /world/gui/ainfo/slot$i
- # new nlinknode /world/gui/ainfo/slot$i/link
- # /world/gui/ainfo/slot$i/link.settarget /data/if_emptyslot/leer
- # /world/gui/ainfo/slot$i.tx [expr $i * 2 - 20 ]
- # }
- #
- # set i 0
- # foreach klunker [$me.artefactlist] {
- # incr i
- # new n3dnode /world/gui/ainfo/$i
- # new nlinknode /world/gui/ainfo/$i/link
- # /world/gui/ainfo/$i/link.settarget [$klunker.getprototype]/visual/ifartefact
- # /world/gui/ainfo/$i.tx [expr $i * 2 - 20 ]
- # }
- #
- # # Energiebalken macht jetzt der guimenuhandler
- # ## Der EnergieBalken wird hier auch gleich mit gemacht
- # ##if ![exists /world/gui/ebar] { /data/if_ebar/ebar.clone /world/gui/ebar; puts "ENERGY BAR" }
- #
- #
- # # Falls SpellSlot noch leer
- # # und ein Spell aufgesammelt wurde, dann wird dieser in den Quickslot bef÷rdert
- #
- # set currentspell [$me.getquickslot]
- # if { $currentspell=="null" } {
- # foreach klunker [$me.artefactlist] {
- # if { [string match "*spell*" $klunker] } {
- # $me.setquickslot $klunker
- # }
- # }
- # }
- #
- # }
- #}
-
- proc delete_helpscreen { } {
- puts "*** delete_helpscreen IS OBSOLETE ***"
- }
-
- proc delete_possessicon { } {
- if [exists /world/gui/posses] { delete /world/gui/posses }
- }
-
- proc delete_artefacts { } {
- puts "*** delete_artefacts IS OBSOLETE ***"
- # if [exists /world/gui/ainfo] { delete /world/gui/ainfo }
- }
-
- proc delete_ebar { } {
- puts "*** delete_ebar IS OBSOLETE ***"
- # if [exists /world/gui/ebar ] { delete /world/gui/ebar }
- }
-
- proc hide_artefacts { } {
- puts "*** hide_artefacts IS OBSOLETE ***"
-
- # set userClan [/world.getuserclan]
- # if {$userClan != "null"} {
- #
- # set me [$userClan.getmaennel]
- # if {$me != "null"} {
- #
- # if {([$me.isshadow] == "false")} {
- # delete_artefacts
- # }
- # }
- # }
- }
-
- # --------------------------------------------------------------------
- # Ladescreen (LOADING) NUR F▄R DEN ANFANG VERWENDEN / WENN
- # Noch keine Database da is ! Mit remove_loadscreen wieder entfernen !
- # --------------------------------------------------------------------
- proc show_loadscreen {} {
- puts "*** show_loadingscreen IS OBSOLETE!"
- }
-
- proc remove_loadscreen {} {
- puts "*** remove_loadingscreen IS OBSOLETE!"
- }
-
- # --------------------------------------------------------------------
- # Zeigt fⁿr 3 Sekunden kurze Info an und entfernt diese dann wieder
- # --------------------------------------------------------------------
- proc show_info { info } {
- puts "*** show_info $info: OBSOLETE!"
- }
-
- proc hide_info { } {
- puts "*** hide_info $info: OBSOLETE!"
- }
-
-
- # --------------------------------------------------------------------
- # Zeigt Basalt-Info-Text an
- # die Zeit ist derzeit nicht mehr variabel
- #
- # 29-Nov-00 floh neue Shader/Texture Objekt Struktur
- # --------------------------------------------------------------------
- proc show_infotext { info zeit } {
- puts "*** show_infotext IS OBSOLETE ***"
- }
-
-
- # --------------------------------------------------------------------
- # Anzeige des aktuell angewΣhlten Objects
- # Das ist dieser alte FOCUS - sollte obsolete sein.
- # --------------------------------------------------------------------
- proc show_sel { selected friend } {
- puts "*** show_sel IS OBSOLETE ***"
- }
-
- proc rem_sel {} {
- puts "*** rem_sel IS OBSOLETE ***"
- }
-
- # --------------------------------------------------------------------
- # STD Lange Aktions Info, die von Hand weggenommen werden mu▀.
- # --------------------------------------------------------------------
- proc show_longaction { longaction } {
- puts "*** show_longaction $longaction: OBSOLETE"
- }
-
-
- # -------------------------------------------------------------------
- # Blendet die Onscreen Hilfe ein/aus
- # -------------------------------------------------------------------
- proc hilfe {} {
- puts "*** hilfe IS OBSOLETE ***"
- }
-
- # -------------------------------------------------------------------
- proc screenshot {} {
- global screenshotcounter
- global home
- set curdir [pwd]
- cd $home
- incr screenshotcounter
- set bildname "pix[format %04d $screenshotcounter].bmp"
- /sys/servers/gfx.screenshot $bildname
- cd $curdir
- return
- }
-
-
- # -------------------------------------------------------------------
- #
- # OCTREE und CLIPPING VISUALISIERUNG AN / AUS (durchschalten)
- #
- # 07-Jul-99 floh Visualisierung fuers aktuelle Vehikel
- # 26-Nov-99 bernd Neue Visualisierungen
- #
- proc visualisations {} {
- global vis
- set vhcl [/world.getviewercarrier]
- switch $vis {
- 0 {
- puts "*** OCTREE VISUALIZATION"
- set vis 1
- /game/handler/octree.setvisualize true
- /game/handler/coll2.setvisualize false
- $vhcl.setvisualizephysics false
- $vhcl.setvisualizeway false
- $vhcl.setvisualizecmdbuffer false
- $vhcl.setvisualizecamera false
- }
- 1 {
- puts "*** PHYSICS VISUALIZATION"
- set vis 2
- /game/handler/octree.setvisualize false
- /game/handler/coll2.setvisualize false
- $vhcl.setvisualizephysics true
- $vhcl.setvisualizeway false
- $vhcl.setvisualizecmdbuffer false
- $vhcl.setvisualizecamera true
- }
- 2 {
- puts "*** WAYPOINT VISUALIZATION"
- set vis 3
- /game/handler/octree.setvisualize false
- /game/handler/coll2.setvisualize false
- $vhcl.setvisualizephysics false
- $vhcl.setvisualizeway true
- $vhcl.setvisualizecmdbuffer true
- $vhcl.setvisualizecamera false
- }
- 3 {
- puts "*** COLLISSION VISUALIZATION"
- set vis 4
- /game/handler/octree.setvisualize false
- /game/handler/coll2.setvisualize true
- $vhcl.setvisualizephysics false
- $vhcl.setvisualizeway false
- $vhcl.setvisualizecmdbuffer false
- $vhcl.setvisualizecamera false
- }
- default {
- puts "*** NO VISUALIZATION"
- set vis 0
- /game/handler/octree.setvisualize false
- /game/handler/coll2.setvisualize false
- $vhcl.setvisualizephysics false
- $vhcl.setvisualizeway false
- $vhcl.setvisualizecmdbuffer false
- $vhcl.setvisualizecamera false
- }
- }
- return
- }
-
-
- # -------------------------------------------------------------------
- #
- # Schaltet zwischen verschiedenen TIMELOCKS um
- #
- # 12-Aug-99 floh 'unlockdeltat' ersetzt durch 'lockdeltat 0.0'
- # -------------------------------------------------------------------
- proc zeitlupe { } {
- global timebase
- switch $timebase {
- 0 { /sys/servers/time.lockdeltat 0.005
- set timebase 1
- }
- 1 { /sys/servers/time.lockdeltat 0.125
- set timebase 2
- }
- default {
- /sys/servers/time.lockdeltat 0.0
- set timebase 0
- }
- }
- return
- }
-
-
-
- # -------------------------------------------------------------------
- # Schaltet SCHNELL / LANGSAM
- # created: 2002-Apr-09 BERND
- # -------------------------------------------------------------------
- set timebasezwei 0
- proc schnell { } {
- global timebasezwei
- switch $timebasezwei {
- 0 {
- puts "schnell"
- /sys/servers/time.lockdeltat 0.1
- set timebasezwei 1
- }
- 1 {
- puts "normal"
- /sys/servers/time.lockdeltat 0.0
- set timebasezwei 0
- }
- }
- return
- }
-
-
- # ---------------------------------------------------------------------------------
- #
- # Killt das aktuelle Vehicle
- #
- # upd.: 02-Dec-99 Bernd Nicht mehr per releasevehicle sondern
- # per reduceenergy.
- # 25-May-01 floh maennel rausgefiltert
- # ---------------------------------------------------------------------------------
- proc killme { } {
- set me [[/world.getuserclan].getmaennel]
- set other [/world.getviewercarrier]
- if {$me != $other} {
- $other.reduceenergy 10000000
- }
- }
-
- proc killme2 { } {
- set me [[/world.getuserclan].getmaennel]
- set other [/world.getviewercarrier]
- if {$me != $other} {
- $other.reduceenergy 10000000
- }
- }
-
-
- # -------------------------------------------------------------------
- proc watch_own {} {
- puts "*** watch_own IS OBSOLETE ***"
-
- # diese routine macht keinen Sinn mehr, weil ich keine
- # anderen Objekte mehr angucken kann!
- # return
- }
-
-
- # -------------------------------------------------------------------
- proc watch_own2 {} {
- puts "*** watch_own2 IS OBSOLETE ***"
-
- # diese routine macht keinen Sinn mehr, weil ich keine
- # anderen Objekte mehr angucken kann!
- # return
- }
-
- # -------------------------------------------------------------------
- # Liefert den ClanNamen des ⁿbergebenen FULL NAME VEHICLES
- # created: 26-Nov-99 Bernd
- # -------------------------------------------------------------------
- proc clanof { fullname } {
- puts "*** clanof IS OBSOLETE ***"
-
- # set liste [ split $fullname "/" ]
- # set laenge [ llength $liste ]
- # set currentclan [ lindex $liste [ expr $laenge - 2 ]]
- # return $currentclan
- }
-
- # -------------------------------------------------------------------
- proc fx { effect yy } {
- set cur [ psel ]
- if { [$cur.isshadow] == "false"} {
- newv fx_$effect
- alignvehicle $cur 0 $yy 0 0 0 0
- }
- sel $cur
- return
- }
-
- # -------------------------------------------------------------------
- # Setzt den Cursor um
- # -------------------------------------------------------------------
- proc watchhandling { vehicle } {
- puts "*** watchhandling IS OBSOLETE ***"
-
- # if { $vehicle!="null" } {
- #
- # puts "[clock format [clock seconds] -format "%H%M%S" ] handle $vehicle"
- #
- # /world/viewer.setwatch $vehicle
- #
- # if {[$vehicle.isvehicleclass "concret.technical.static.building"] =="true"} {
- # /data/if_marker/marker.sxyz 5 5 5
- # /data/if_marker/markerred.sxyz 5 5 5
- # } else {
- # set scale [$vehicle.getradius]
- # /data/if_marker/marker.sxyz $scale $scale $scale
- # /data/if_marker/markerred.sxyz $scale $scale $scale
- # }
- #
- # if { [[/world.getuserclan].getname] == [clanof $vehicle] } {
- # /world/viewer.setmarkerproto if_marker/marker
- # show_sel [$vehicle.getprototype] good
- # } else {
- # /world/viewer.setmarkerproto if_marker/markerred
- # show_sel [$vehicle.getprototype] evil
- # }
- #
- # } else {
- # puts "NULL"
- # }
- }
-
- # Das ist der klassische Alte Befehl, der nach den bekannten Regeln das erstbeste
- # Vehicle in der aktuellen Mitte des Bildschirms nimmt.
- proc watchvehicle {} {
-
- puts "*** watchvehicle IS OBSOLETE ***"
-
- # puts "[clock format [clock seconds] -format "%H%M%S" ] watchvehicle****"
- # rem_sel
- # set vehicle [ /world/viewer.searchvehicle all false true false ]
- # watchhandling $vehicle
- # if { $vehicle!="null"} {
- # global current_input
- # global prev_input
- # set prev_input $current_input
- # sel [[/world.getuserclan].getmaennel]
- # watchfinetune_input
- # }
- }
-
- # Beendet die Objekt Feinauswahl und gibt die Steuerung an die Originalsteuerung zurⁿck
- proc watchok {} {
- puts "*** watchok IS OBSOLETE ***"
-
- # global prev_input
- # $prev_input
- # puts "[clock format [clock seconds] -format "%H%M%S" ] watchok****"
- }
-
- # Verfeinert die Asuwahl
- proc watchfine { direction } {
- puts "*** watchfine IS OBSOLETE ***"
-
- # puts "[clock format [clock seconds] -format "%H%M%S" ] watchfine"
- # watchhandling [ /world/viewer.searchvehicle $direction false true false ]
- }
-
- #-------------------- Schwarzer Vorhang -----------------------------------
- proc vorhang {} {
- puts "*** vorhang IS OBSOLETE ***"
-
- # fadeweg
- # set cursel [psel]
- # sel /world/gui
- # new n3dnode vorhang
- # sel vorhang
- #
- # new nmeshnode mesh
- # mesh.setfilename "lib:standards/plane.nvx"
- #
- # # einfach nur eine schwarze Flaeche
- # new nshadernode shader
- # sel shader
- # .setminlod 0.000000
- # .setrenderpri 801
- # .setdiffuse 0.000000 0.000000 0.000000 1.000000
- # .setemissive 0.000000 0.000000 0.000000 1.000000
- # .setambient 0.000000 0.000000 0.000000 0.000000
- # .setlightenable true
- # .setalphaenable true
- # .setalphablend srcalpha invsrcalpha
- # .setzwriteenable true
- # .setfogenable false
- # .setzfunc "always"
- # .setcullmode "none"
- # sel ..
- #
- # sel $cursel
- }
-
- #-------------------- FADE IN F▄R SPIELANFANG -----------------------------------
- proc fadein {} {
-
- puts "*** fadein ist OBSOLETE ***"
-
- # fadeweg
- # set cursel [psel]
- # sel /world/gui
- # new n3dnode fadein
- # sel fadein
- #
- # new nmeshnode mesh
- # mesh.setfilename "lib:standards/plane.nvx"
- #
- # new nshadernode shader
- # sel shader
- # .setminlod 0.000000
- # .setrenderpri 800
- # .setdiffuse 0.000000 0.000000 0.000000 1.000000
- # .setemissive 0.000000 0.000000 0.000000 0.000000
- # .setambient 0.000000 0.000000 0.000000 0.000000
- # .setlightenable true
- # .setalphaenable true
- # .setalphablend "srcalpha" "invsrcalpha"
- # .setzwriteenable true
- # .setfogenable false
- # .setzfunc "always"
- # .setcullmode "none"
- #
- # new nipol diff
- # sel diff
- # .connect setdiffuse
- #
- # set starttime [/sys/servers/time.gettime]
- # set endtime [expr $starttime + 2]
- # set endtime2 [expr $starttime + 4]
- # .addkey4f 0 0 0 0 1
- # .addkey4f $starttime 0 0 0 1
- # .addkey4f $endtime 0 0 0 0
- # .addkey4f $endtime2 0 0 0 0
- # sel ..
- #
- # sel ..
- #
- # after 3500 { fadeweg }
- # sel $cursel
- }
-
- proc fadeweg {} {
-
- puts "*** fadeweg IST OBSOLETE ***"
-
- # if { [exists /world/gui/fadein] } { delete /world/gui/fadein }
- # if { [exists /world/gui/vorhang] } { delete /world/gui/vorhang }
- }
-
-
- # -------------------------------------------------------------------
- # Escape
- # + wenn ich was angucke, wird der Lock wieder weggenommen - ich
- # gucke mich wieder selber an
- # + wenn ich nix angucke - dann wird das menu aufgemacht
- # 18-May-01 floh + ingame menus for single and multiplayer
- # 18-Jun-01 ich + escape leaves vehicle
- # -------------------------------------------------------------------
- proc escape {} {
-
- set current [ /world.getviewercarrier ]
- set nextone [ /world.getviewercarrier ]
-
- set userClan [/world.getuserclan]
- if {"null" == $userClan} {
- return
- }
- set me [ $userClan.getmaennel ]
- if {"null" == $me} {
- return
- }
-
- # altes Verzeichnis merken
- set oldCWD [.getfullname]
-
- sel $current
-
- # steuert das maennel ein anders Objekt?
- if {([$me.ispossessingvehicle] == "true") || ([$me.ispossessingbuilding] == "true")} {
-
- if {[$me.ispossessingvehicle] == "true"} {
-
- # vehicle: leave or watch own
- if {$nextone == $current} {
- leavevehicle
- } else {
- watch_own
- }
- } else {
-
- # house: leavevehicle
- leavevehicle
- }
- } else {
-
- # not inside a vehicle. viewer locked?
- if {$nextone == $current} {
-
- # no, open menu
- if {[/world.isnetsession] == "true"} {
- open_menu ingame_multiplayer
- } else {
- open_menu ingame_singleplayer
- }
- } else {
-
- # watch own
- watch_own
- }
- }
- }
-
- # -------------------------------------------------------------------
- # John springt zu GebΣude
- # created: 2000-10-18
- # 05-Dec-01 floh setviewercarrier
- # -------------------------------------------------------------------
- proc jumptobuilding { nextone } {
-
- set userClan [/world.getuserclan]
- if {$userClan != "null"} {
- set me [$userClan.getmaennel]
- if {$me != "null"} {
- /world.setviewercarrier "null"
- $me.alignvehicle $nextone 0 10 8 0 0 0
- $me.setstate wirbel
- $me.setvisible true
- /world.setviewercarrier $me
- /world.sethandcontrol $me
- fx appear 1
- sel $me
- flying_input
- }
- }
- return
- }
-
- #---------------------------------------------------------------------------
- # Standard Aktion
- # neu
- #
- # 05-Dec-01 floh auf world.setviewercarrier umgebaut
- #---------------------------------------------------------------------------
- proc action {} {
-
- set current [/world.getviewercarrier]
- set nextone [/world.getviewercarrier]
-
- set userClan [/world.getuserclan]
- if {"null" == $userClan} {
- return
- }
- set me [ $userClan.getmaennel ]
- if {"null" == $me} {
- return
- }
-
- # altes Verzeichnis merken
- set oldCWD [.getfullname]
-
- sel $current
-
- # steuert das maennel ein anders Objekt?
- if {([$me.ispossessingvehicle] == "true") || ([$me.ispossessingbuilding] == "true")} {
-
- # steuert maennel ein vehicle?
- if {[$me.ispossessingvehicle] == "true"} {
-
- } else {
-
- }
-
- } else {
-
- # Maennel ist frei. Steht es auf einer Possess-Platform?
- set curPossess [$me.getcurrentpossesshouse]
- if {$curPossess == "null"} {
-
- # bin frei. Sehe ich jemanden an?
- if {$current != $nextone} {
-
- } else {
-
- # ich sehe mich selbst an. Aktion bedeutet Oeffnen des Menues,
- # aber nur wenn ich im Zustand "stand" bin. In allen anderen
- # Zustaenden mache ich nichts
- if {[$me.getstate] == "stand"} {
-
- $me.setmenuopen true
- }
- }
-
- } else {
-
- # kann "Hausbehandlung" starten, wenn im Zustand stehen
- if {[$me.getstate] == "stand"} {
-
- # Hat das Haus ein vehicle, dessen Steuerung ich uebernehmen
- # kann?
- if {[$curPossess.isvehicleclass concret.technical.static.building.garage] == "true" } {
-
- # existiert das vehicle dazu
- set vehicle [$curPossess.getproduct 0]
- if {$vehicle != "null"} {
-
- # wir muessen es evtl. noch hervorlocken und
- # uebernehmen die Steuerung
- /world.unsethandcontrol
- /world.setviewercarrier $vehicle
- $me.setpossessingbuilding false
- $me.setpossessingvehicle true
- sel $me
- vhclwatch_input
-
- if {[$vehicle.isvisible] == "false"} {
-
- sel $vehicle
- setluretask
- }
- }
- }
-
- # Ein Flakgebaeude?
- if {[$curPossess.isvehicleclass concret.technical.static.building.flakbuilding] == "true" } {
-
- # Flaks haben ein Produkt, in welches wir uns setzen
- set flak [$curPossess.getproduct 0]
- if {$flak != "null"} {
-
- /world.unsethandcontrol
- /world.setviewercarrier $flak
- $me.setpossessingvehicle false
- $me.setpossessingbuilding true
- sel $me
- vhclwatch_input
- }
- }
-
- # ist es ein "benutzbares" Gebaeude (derzeit nur island drives)?
- if {[$curPossess.isvehicleclass concret.technical.static.building.islanddrive] == "true" } {
-
- /world.unsethandcontrol
- /world.setviewercarrier $curPossess
- $me.setpossessingvehicle false
- $me.setpossessingbuilding true
- sel $me
- vhclwatch_input
- }
- }
- }
- }
-
- # Verzeichnis ruecksetzen
- sel $oldCWD
- }
-
-
- # -------------------------------------------------------------------
- # ZAUBERSPRUCH ABFEUERN
- #
- # created: 23-Jun-2000 Bernd
- # upd.: 28-Jun-2000 Bernd (Preis)
- # -------------------------------------------------------------------
- proc spell {} {
-
- set current [ /world.getviewercarrier ]
- set nextone [ /world.getviewercarrier ]
- set me [ [/world.getuserclan].getmaennel ]
- set currentspell [ $me.getquickslot ]
-
- if { $currentspell!="null"} {
- set energyreduction [[[$currentspell.getprototype]/visual/price.gethead].getname]
- set cure [ $me/../.getcurrentenergy ]
- if { $cure > $energyreduction } {
- $me/../.setcurrentenergy [expr ($cure-$energyreduction)]
- $me.countupanddown simplecount 0.1 1 0.3
- set spellobject [ newv [[[$currentspell.getprototype]/visual/action.gethead].getname] ]
- if { $nextone=="null" } { set nextone $me }
- $spellobject.alignvehicle $nextone 0 0 0 0 0 0
- if { $nextone==$me} { $spellobject.alignvehicle $nextone 0 0 -40 0 0 0 }
- $spellobject.setdirection 0 0 0
- } else {
- show_info noenergy
- }
- } else {
- puts "Quickslot empty"
- }
-
- return
- }
-
- # Kuemmert sich nur um Channel
- proc spellownercommand {} {
-
- set userClan [/world.getuserclan]
- if {"null" != $userClan} {
- set maennel [$userClan.getmaennel]
- if {"null" != $maennel} {
-
- # stehend oder laufend schiessen?
- if {"run" == [$maennel.getstate]} {
- .countupanddown simplecount 0.1 1 0.3
- } else {
- .countupanddown simplecount 0.2 0.2 0.3
- }
- }
- }
- }
-
- #-------------------------------------------------------------------------------
- # John springt aus dem aktuellen Vehicle, wenn er drinsitzt.
- # created: 26-Nov-99 Bernd
- # upd.: 02-Dec-99 Bernd NUR WENN ER DRINSITZT
- # 05-Dec-01 floh auf world.setviewercarrier umgebaut
- #-------------------------------------------------------------------------------
- proc squadron_leavevehicle {} {
-
- # Da leavevehicle prophyloaktisch von jeder Explosion aufgerufen wird,
- # mu▀ ich erst gucken, ob ich auch drinnen sitze.
- # Ich verlasse mich drauf, da▀ das aktuelle Nebula Directory
- # dem Namen des aktuellen Fahrzeuges entspricht. Wenn nΣmlich nicht
- # breche ich das Kommando gleich wieder ab.
- if { [ /world.getviewercarrier ] != [psel] } { return }
-
- if {[[psel].getstate] == "explode"} {
- /game/handler/feedback.registerairplanedestroyed
- }
-
- # war ich Geschwaderchef
- set new_one "null"
- if {[.isleader] == "true"} {
-
- if {"null" == [.getfirstlivingmember]} {
-
- # Wenn ich der letzte im Geschwader war, kehre ich
- # zum Maennel zurueck
- /world.unsethandcontrol
-
- # Maennel war nicht mehr unsichtbar, muss also nur wieder
- # die handkontrolle bekommen.
-
- set userClan [/world.getuserclan]
- if {"null" != $userClan} {
- set me [$userClan.getmaennel]
- if {"null" != $me} {
- /world.setviewercarrier $me
- handkontrolle
-
-
- $me.setpossessingvehicle false
- $me.setpossessingbuilding false
- }
- }
- return
- } else {
-
- # es gibt noch Untergebene. An den ersten haenge ich mich
- # ran.
- set new_one [.getfirstlivingmember]
- }
- } else {
-
- # es kann durchaus passieren, dass ich als member kaputt gehe
- # (z.B. weil keine Handsteuerung etc...), dann an Leader haengen
- set new_one [.getleader]
-
- # Der Geschwaderfuehrer kann auch in diesem Moment sterben.
- # Dann eben zurueck zum Maennel
- if {[$new_one.getstate] == "explode"} {
- puts "WNIMANIJE!!! leavevehicle_squadron: smert natschalnik!"
-
- /world.unsethandcontrol
- set userClan [/world.getuserclan]
- if {"null" != $userClan} {
- set me [$userClan.getmaennel]
- if {"null" != $me} {
- /world.setviewercarrier $me
- handkontrolle
- $me.setpossessingvehicle false
- $me.setpossessingbuilding false
- }
- }
- return
- }
- }
-
- if {"null" != $new_one} {
-
- set userClan [/world.getuserclan]
- if {"null" != $userClan} {
- set maennel [$userClan.getmaennel]
- if {"null" != $maennel} {
- #set old [psel]
- #sel $maennel
-
- /world.setviewercarrier $new_one
- #input_possessingvehicle
- /world.sethandcontrol $new_one
- #sel $old
-
- # es kann durchaus passieren, dass der neue in ner Garage ist...
- if {[.isvisible] == "false"} {
-
- # vehicle muss selektiert sein!!!
- setluretask
- }
- }
- }
- }
-
- return
- }
-
- #-------------------------------------------------------------------------------
- # Standard-Leavevehicle
- #
- # Leave Vehicle and return control to maennel.
- #-------------------------------------------------------------------------------
- proc leavevehicle {} {
-
- # Da leavevehicle prophyloaktisch von jeder Explosion aufgerufen wird,
- # mu▀ ich erst gucken, ob ich auch drinnen sitze.
- # Ich verlasse mich drauf, da▀ das aktuelle Nebula Directory
- # dem Namen des aktuellen Fahrzeuges entspricht. Wenn nΣmlich nicht
- # breche ich das Kommando gleich wieder ab.
- if {[/world.getviewercarrier] != [psel]} {
- return
- }
-
- if {[[psel].iskilled] == "true"} {
- /game/handler/feedback.registerbuildingdestroyed
- }
-
- # Wenn ich der letzte im Geschwader war, kehre ich
- # zum Maennel zurueck
- /world.unsethandcontrol
-
- # Maennel war nicht mehr unsichtbar, muss also nur wieder
- # die handkontrolle bekommen.
- set userClan [/world.getuserclan]
- if {"null" != $userClan} {
- set me [$userClan.getmaennel]
- if {$me != "null"} {
- /world.setviewercarrier $me
- handkontrolle
-
- $me.setpossessingvehicle false
- $me.setpossessingbuilding false
- }
- }
- }
-
- #-------------------------------------------------------------------------------
- # Handkontrolle an Maennel geben. Wird von leavevehicle benoetigt.
- #
- #-------------------------------------------------------------------------------
- proc handkontrolle {} {
- set current [/world.getviewercarrier]
- if {$current == "null"} {
- puts "Warning: 'handkontrolle' failed!"
- return
- }
- /world.sethandcontrol $current
- return
- }
-
- # -------------------------------------------------------------------
- proc fast {} {
- puts "fast"
- /world.setdayperiod 30
- return
- }
-
- # -------------------------------------------------------------------
- proc slow {} {
- puts "slow"
- /world.setdayperiod 5200
- return
- }
-
- # -------------------------------------------------------------------
- proc speedswitch {} {
- global uhr
- if { $uhr==0 } {
- fast
- set uhr 1
- } else {
- slow
- set uhr 0
- }
- return
- }
-
-
- # -------------------------------------------------------------------
- proc steinhagel {} {
- puts "*** steinhagel IST OBSOLETE ***"
-
- # # Einen Environment Clan raussuchen
- # set envclan "null"
- #
- # sel /world/clans
- # set x [.gethead]
- # while {$x != "null"} {
- # sel $x
- # if {[$x.isenvironment]=="true"} {
- # if {[$x.isshadow]=="false"} {
- # set envclan $x
- # }
- # }
- # set x [.getsucc]
- # }
- #
- # if { $envclan=="null" } { puts "Steinhagel: No envclan found."; return }
- #
- # for { set i 1 } { $i < 3 } { incr i 1} {
- # for { set ii 1 } { $ii < 3 } { incr ii 1} {
- # set dingens [ $envclan.createvehicle brocken ]
- # $dingens.setposition [ expr -25 + rand() * 50 ] 70 [ expr -25 + rand() * 50 ]
- # }
- # }
- #
- #return
- }
-
- # -------------------------------------------------------------------
- # 16-Jun-99 floh angepasst an neues Script-Interface
- # neue vehicle schaffen
- # -------------------------------------------------------------------
- proc newv { orig } {
-
- set userClan [/world.getuserclan]
- if {$userClan != "null"} {
- set me [$userClan.getmaennel]
- if {$me != "null"} {
- set v [$userClan.createvehicle $orig]
- sel $v
- alignvehicle $me 0 10 -20 0 0 0
-
- return $v
- } else {
- puts "User has no character, `newv' aborted."
- }
- } else {
- puts "No user clan available, `newv' aborted."
- }
-
- return "null"
- }
-
- # -------------------------------------------------------------------
- # 25-Jan-02 sven angepasst an neues Script-Interface
- # neue spells, ... legen
- # -------------------------------------------------------------------
- proc news { orig } {
-
- set userClan [/world.getuserclan]
- if {$userClan != "null"} {
- set me [$userClan.getmaennel]
- if {$me != "null"} {
- set v [$userClan.createvehicle $orig]
- sel $v
- alignvehicle $me 0 3 0 0 0 0
-
- return $v
- } else {
- puts "Player has no character, `news' aborted."
- }
- } else {
- puts "No user clan available, `news' aborted."
- }
-
- return "null"
- }
-
- # -------------------------------------------------------------------
- proc new3 { orig } {
-
- set me [[/world.getuserclan].getmaennel]
-
- set player [/world.getuserclan]
- set v [$player.createvehicle $orig]
- sel $v
-
- if {$me != "null"} {
- alignvehicle $me 0 -1 0 0 0 0
- }
-
- return $v
- }
-
-
- # -------------------------------------------------------------------
- proc newv2 { orig } {
- for {set cl [/world/clans.gethead]} {$cl != "null"} {set cl [$cl.getsucc]} {
- puts "clan = $cl"
- if {[$cl.isenvironment] == "true"} {
- puts "env clan = $cl"
- set v [$cl.createvehicle $orig]
- sel $v
- .setposition 0 20 0
- return $v
- }
- }
- }
-
- # -------------------------------------------------------------------
- # 16-Jun-99 floh umgeschrieben auf neues Scriptinterface
- # erwartet jetzt normalen Pfadnamen
- # -------------------------------------------------------------------
- proc ss { name } {
- /world.setviewercarrier $name
- sel $name
- return
- }
-
- # -------------------------------------------------------------------
- proc s { name } {
- /world.sethandcontrol $name
- /world.setviewercarrier $name
- sel $name
- return
- }
-
- # -------------------------------------------------------------------
- # session()
- # zeigt aktuelle laufende Sessions mit Nummer und Zusatzinfo an
- # 16-Jun-99 floh created
- # -------------------------------------------------------------------
- proc sessions {} {
- puts "*** sessions IST OBSOLETE ***"
-
- # set nums [/sys/servers/network.asksessions false 0 0]
- # if {$nums == 0} {
- # puts "No sessions."
- # } else {
- # for {set i 1} {$i <= $nums} {incr i} {
- # set s_name [/sys/share/sessions/$i/name.gets]
- # set s_address [/sys/share/sessions/$i/address.gets]
- # puts "<$i>: $s_name on $s_address"
- # }
- # }
- }
-
-
- #-----------------------------------------------------------------
- proc toggle_netstat {} {
- global netstat
- switch $netstat {
- 0 {
- /sys/servers/console.unwatch
- /sys/servers/console.watch "net_*"
- set netstat 1
- }
- 1 {
- /sys/servers/console.unwatch
- /sys/servers/console.watch "send0_*"
- set netstat 2
- }
- 2 {
- /sys/servers/console.unwatch
- /sys/servers/console.watch "send1_*"
- set netstat 3
- }
- 3 {
- /sys/servers/console.unwatch
- /sys/servers/console.watch "receive0_*"
- set netstat 4
- }
- 4 {
- /sys/servers/console.unwatch
- /sys/servers/console.watch "receive1_*"
- set netstat 5
- }
- 5 {
- /sys/servers/console.unwatch
- set netstat 0
- }
- }
- return
- }
-
- # -------------------------------------------------------------------
- #
- # 25-Nov-99 bernd Abfrage ob ich Netzsession bin
- #
- proc feinde {} {
- global feindclan
-
- # fremdartigen clan erzeugen, wenn der noch nicht exisfitiert
- if {$feindclan=="null"} {
- if {[/world.isnetsession] == "false"} {
- set feindclan [/world.createclan]
- } else {
- set feindclan [/world.createclan]
- }
- }
-
- # Falls man uns den Clan unter dem Arsch weggel÷scht hat
- # mⁿssen wir ihn auch wieder neu erzeugen
- if ![exists $feindclan] {
- if {[/world.isnetsession] == "false"} {
- set feindclan [/world.createclan]
- } else {
- set feindclan [/world.createclan]
- }
- }
-
- $feindclan.setclancolor 1 0 0
- $feindclan.setsymbolicname boese
-
- setfaction boese enemy1
-
- set b1 [$feindclan.createvehicle p_shark]
- $b1.setposition 100 50 0
- set b1 [$feindclan.createvehicle p_shark]
- $b1.setposition -120 20 0
- set b1 [$feindclan.createvehicle p_shark]
- $b1.setposition 0 20 150
- set b1 [$feindclan.createvehicle p_shark]
- $b1.setposition 0 3 -50
-
- return
- }
- # -------------------------------------------------------------------
- #
- # 18-july-02 heninng skrits als feinde
- #
- proc viecher {} {
- global feindclan
-
- # fremdartigen clan erzeugen, wenn der noch nicht exisfitiert
- if {$feindclan=="null"} {
- if {[/world.isnetsession] == "false"} {
- set feindclan [/world.createclan]
- } else {
- set feindclan [/world.createclan]
- }
- }
-
- # Falls man uns den Clan unter dem Arsch weggel÷scht hat
- # mⁿssen wir ihn auch wieder neu erzeugen
- if ![exists $feindclan] {
- if {[/world.isnetsession] == "false"} {
- set feindclan [/world.createclan]
- } else {
- set feindclan [/world.createclan]
- }
- }
-
- $feindclan.setclancolor 1 0 0
- $feindclan.setsymbolicname boese
-
- setfaction boese enemy1
-
- set b1 [$feindclan.createvehicle skrit04]
- $b1.setposition 100 50 0
- set b1 [$feindclan.createvehicle skrit04]
- $b1.setposition -120 20 0
- set b1 [$feindclan.createvehicle skrit04]
- $b1.setposition 0 20 150
- set b1 [$feindclan.createvehicle skrit04]
- $b1.setposition 0 3 -50
-
- return
- }
-
- # -------------------------------------------------------------------
- # Setzt das "Hervorlock-Ziel". Ist wie Approachpos, aber anderer
- # Zieltyp.
- # -------------------------------------------------------------------
- proc setluretask {} {
-
- # Hervorlocken ist nun ein Task!
- .settask lure null
- }
-
- # ---------------------------------------------------------------
- # Wird von einer Garage aufgerufen, die ihr Vehicle (so sie eines
- # hat) sichtbar schaltet und auf die AppearPos setzt
- #
- # 13-Aug-01 floh Meldungen rausgenommen
- # ---------------------------------------------------------------
- proc appearvehicle {} {
-
- puts "--> appearvehicle"
-
- # Schatten haben weder product noch creator
- if { [.isshadow] == "true" } { return }
-
- set my_vehicle [.getproduct 0]
- if {$my_vehicle != "null"} {
-
- # Hier muesste auch noch die Ausrichtung folgen
- set apos [.getappearpos]
- set adir [.getappeardir]
- $my_vehicle.setvisible true
- $my_vehicle.setposition [lindex $apos 0] [lindex $apos 1] [lindex $apos 2]
- $my_vehicle.setdirection [lindex $adir 0] [lindex $adir 1] [lindex $adir 2]
-
- # Ich muss das SetState sofert machen, weil der Sammler sonst erst
- # im naechsten Frame darauf reagiert und somit kurz unsichtbar ist!
- # Wenn er raus kommt, hat er ein Ziel. Deshalb goto. Wegschalten kann
- # er immer noch
- $my_vehicle.announcestate goto
- } else {
- puts "Warning! appearvehicle has no product!!!"
- }
-
- puts "<-- appearvehicle"
- }
-
- # --------------------------------------------------------------------
- # Der Sinn dieser eigenartigen Routine ist es, dem vehicle zu sagen,
- # dass die Einholanimation fertig ist und es nun nach Belieben weiter-
- # schalten kann. Das ist deshalb notwendig, weil jedes vehicle anders
- # entscheidet, was dann kommt (sleep, unload ...)
- # --------------------------------------------------------------------
- proc product_in_garage {} {
-
- puts "-> product_in_garage"
-
- # Schatten haben weder product noch creator
- if { [.isshadow] == "true" } { return }
-
- set my_vehicle [.getproduct 0]
- if {$my_vehicle != "null"} {
- $my_vehicle.setinsidegarage true
- } else {
- puts "Warning! setproductstate has no product!!!"
- }
- puts "<- product_in_garage"
- }
-
- # ------------------------------
- # Setzt Objekt auf volle Energie
- # ------------------------------
- proc setfullenergy {} {
- .setenergy [.getmaxenergy]
- }
-
- proc start_inputvehicle {} {
-
- # Ich muss hier, um sicherzustellen, dass die garage nicht erst
- # im naechsten frame sich umschaltet, ein announcestate, sondern ein
- # setstate machen.
- set g [.getcreator]
- $g.setstate inputvehicle
- }
-
- proc start_outputvehicle {} {
- set g [.getcreator]
- # puts "--> start_outputvehicle called for garage $g"
- $g.setoutputvehicle true
- }
-
- # -------------------------------------
- # 120 Einheiten Energy beim 1. TC bauen
- # -------------------------------------
-
- proc startenergy {} {
-
- if { [.getcharges] == [ expr [.getmaxcharges] - 1 ] } {
- set clan [ .getclan ]
- $clan.setcurrentenergy [ expr [$clan.getcurrentenergy] + 120 ]
- }
- }
-
- #------------------------------------------------------------------------------------
- proc show_end {} {
- puts "*** show_end: OBSOLETE!"
-
- # global nomads_home
- # set cur [psel]
- # if { [$cur.isshadow] == "false"} {
- # sel /
- # new nroot tmp
- # sel tmp
- # get $nomads_home/data.n/if_menu.n
- # /tmp/if_menu/menu/info/gameover.clone /world/gui/gameover
- # /world/gui/gameover.setactive true
- # }
- # sel $cur
- return
- }
-
- proc remove_end {} {
- puts "*** remove_end IST OBSOLETE ***"
-
- # if {[exists /tmp]} { delete /tmp }
- # if {[exists /world/gui/gameover]} { delete /world/gui/gameover }
- # return
- }
-
- proc final_menuauf {} {
- puts "*** final_menuauf IST OBSOLETE ***"
-
- #global curmenu
- # remove_end
- # m_killgame
- }
-
- proc removethisfromviewer {} {
-
- if {[psel] == [/world.getviewercarrier]} {
- /world.setviewercarrier null
- }
- }
-
- #------------------------------------------------------------------------------------
- # Mit dieser Aktion setze ich ein Ziel
- #------------------------------------------------------------------------------------
- proc action_settarget {me target} {
-
- # Ziel setzen. Vorerst bei mir, spaeter beim Geschwader dieses Ziel setzen.
- $me.setvehicletarget $target 300 true
-
- # handsteuerung ausschalten, damit man sofort die Aktion sieht
- if {[$me.ishandcontrol] == "true"} {
- /world.unsethandcontrol
-
- set john [[/world.getuserclan].getmaennel]
- set old_cwd [psel]
- sel $john
- vhclwatch_input
- sel $old_cwd
- }
- }
-
- #------------------------------------------------------------------------------------
- # Um zum Beispiel towncenter als Beampunkt zu finden. Macht derzeit
- # auch Selektion als WatchObjekt.
- #------------------------------------------------------------------------------------
- proc searchtowncenter {} {
- puts "*** searchtowncenter IST OBSOLETE ***"
-
- # OBSOLETE!!!
- }
-
- #------------------------------------------------------------------------------------
- proc formsquadron {} {
-
- # is called with carrier as controlled vehicle
- set v [/world.getviewercarrier]
- $v.formsquadron 0.0
-
- puts "FORMSQUADRON"
-
- }
-
- #-------------------------------------------------------------------------------
- # Connects the viewer to the house which is going to be build.
- # The house must be the currently selected object.
- # Also takes the hand control away from the character.
- #
- # 30-Oct-01 floh proper header
- # 05-Dec-01 floh umgebaut auf world.setviewercarrier
- #-------------------------------------------------------------------------------
- proc connectviewertohouse {} {
-
- set house [.getfullname]
- set clan [$house.getclan]
- if {[$clan.isuser] == "true"} {
-
- /world.setviewercarrier $house
- /world.unsethandcontrol
-
- # john is watching action in a special state
- set maennel [$clan.getmaennel]
- $maennel.setcreatingbuilding true
- }
- }
-
- #-------------------------------------------------------------------------------
- # Disconnect the viewer from its carrier and connect it back to the maennel.
- # Also gives hand control back to the maennel.
- # The current viewer's carrier must be a house in its bauphase state!
- #-------------------------------------------------------------------------------
- proc removeviewerfromhouse {} {
-
- puts "-> removeviewerfromhouse"
-
- set house [/world.getviewercarrier]
- if {($house != "null") &&\
- ([$house.isvehicleclass concret.technical.static.building] == "true") &&\
- ([$house.getstate] == "bauphase")}\
- {
- set clan [$house.getclan]
- set maennel [$clan.getmaennel]
-
- # Beim Spielabbruch waehrend einer Bauanim kann das Maennel schon tot sein
- if {$maennel != "null"} {
-
- /world.setviewercarrier $maennel
- /world.sethandcontrol $maennel
-
- # allow john to switch back
- $maennel.setcreatingbuilding false
- }
- }
- }
-
- #------------------------------------------------------------------------------------
- # Die einfache Variante. Es wird das naechste vehicle, welches ein
- # Fighter oder eine Flak ist, ausgewaehlt.
- #------------------------------------------------------------------------------------
- proc cycle_airplanes {} {
-
- if {[/world.fastpossessactive] == "true"} {
- set old [psel]
-
- set current [/world.getviewercarrier]
- set maennel [[/world.getuserclan].getmaennel]
-
- set testclass1 "concret.technical.dynamic.vehicle.fighter"
- set testclass2 "concret.technical.static.flak"
-
- if {$maennel == $current} {
- set vehicle [search_next_vehicle null $testclass1 $testclass2]
- } else {
-
- set vehicle [search_next_vehicle $current $testclass1 $testclass2]
- if {$vehicle == "null"} {
-
- # kann ja sein, dass wir ans Ende gekommen sind
- set vehicle [search_next_vehicle null $testclass1 $testclass2]
- }
- }
-
- if {$vehicle != "null"} {
-
- # evtl. aufwecken ...
- if {[$vehicle.isvisible] == "false"} {
-
- sel $vehicle
- setluretask
- }
-
- # nun je nach Flak oder Fighter
- if {"true" == [$vehicle.isvehicleclass concret.technical.dynamic.vehicle.fighter]} {
- # wenn das Flugzeug in der Garage ist, dann Kamera zur Garage
- if {([$vehicle.isvisible] == "false") || \
- ([$vehicle.getstate] == "leavegarage") || \
- ([$vehicle.getstate] == "entergarage")} {
- set garage [$vehicle.getcreator]
- /world.setviewercarrier $garage
- /world.unsethandcontrol
- $vehicle.setviewergrab "true"
- } else {
- /world.setviewercarrier $vehicle
- /world.sethandcontrol $vehicle
- }
- # input schalten braucht immer maennel!
- #sel $maennel
- #input_possessingvehicle
-
- # erst aus- dann einschalten
- $maennel.setpossessingbuilding false
- $maennel.setpossessingvehicle true
-
- # maennel state switch should work automatically
- } else {
-
- # ...und reinspringen
- /world.setviewercarrier $vehicle
- # dann muss es eine Flak sein
- sel $maennel
- #input_possessingbuilding
- /world.sethandcontrol $vehicle
-
- # erst aus- dann einschalten
- $maennel.setpossessingvehicle false
- $maennel.setpossessingbuilding true
-
- # maennel state switch should work automatically
- }
- }
-
- sel $old
- } else {
- puts "Cycle vehicles not possible right now."
- }
- }
-
- #------------------------------------------------------------------------------------
- # schaltet in ein vehicle oder in das naechste. Achtung, beachtet nun auch
- # flaks!
- #------------------------------------------------------------------------------------
- proc cycle_airplanes_ex {} {
-
- set old [psel]
-
- set current [/world.getviewercarrier]
- set maennel [[/world.getuserclan].getmaennel]
- if {$maennel == $current} {
- set vehicle [search_next_vehicle null "concret.technical.dynamic.vehicle.fighter" "nothing"]
- } else {
-
- set testclass "concret.technical.dynamic.vehicle.fighter"
- if {[$current.isvehicleclass "concret.technical.static.flak"] == "true"} {
- set testclass "concret.technical.static.flak"
- }
- set vehicle [search_next_vehicle $current $testclass "nothing"]
- if {$vehicle == "null"} {
-
- # kann ja sein, dass wir ans Ende gekommen sind
- set vehicle [search_next_vehicle null $testclass "nothing"]
- }
- }
-
- if {$vehicle != "null"} {
-
- # evtl. aufwecken ...
- if {[$vehicle.isvisible] == "false"} {
-
- sel $vehicle
- setluretask
- }
-
-
-
- # nun je nach Flak oder Fighter
- if {"true" == [$vehicle.isvehicleclass concret.technical.dynamic.vehicle.fighter]} {
- # wenn das Flugzeug in der Garage ist, dann Kamera zur Garage
- if {[$vehicle.isvisible] == "false"} {
- set garage [$vehicle.getcreator]
- /world.setviewercarrier $garage
- $vehicle.setviewergrab "true"
- } else {
- /world.setviewercarrier $vehicle
- }
- # input schalten braucht immer maennel!
- sel $maennel
- #input_possessingvehicle
- /world.sethandcontrol $vehicle
-
- # erst aus- dann einschalten
- $maennel.setpossessingbuilding false
- $maennel.setpossessingvehicle true
-
- # maennel state switch should work automatically
- } else {
- # ...und reinspringen
- /world.setviewercarrier $vehicle
- # dann muss es eine Flak sein
- sel $maennel
- #input_possessingbuilding
- /world.sethandcontrol $vehicle
-
- # erst aus- dann einschalten
- $maennel.setpossessingvehicle false
- $maennel.setpossessingbuilding true
-
- # maennel state switch should work automatically
- }
- }
-
- sel $old
- }
-
- #------------------------------------------------------------------------------------
- # inner loop for searching of a vehicle class, currently two classes are
- # supported
- #------------------------------------------------------------------------------------
- proc search_next_vehicle {anfang testclass1 testclass2} {
-
- if {$anfang == "null"} {
- set do_it true
- } else {
- set do_it false
- }
-
- # Wenn der Anfang eine Garage ist, dann suchen wir von deren produkt aus.
- if {("null" != $anfang) &&\
- ("true" == [$anfang.isvehicleclass "concret.technical.static.building.garage"])} {
-
- set anfang [$anfang.getproduct 0]
- if {"null" == $anfang} {
-
- return null
- }
- }
-
- for {set test [[/world.getuserclan].gethead]} \
- {$test != "null"} \
- {set test [$test.getsucc]} {
-
- # test erlaubt?
- if {$do_it == "true"} {
-
- # passend?
- if {("true" == [$test.isvehicleclass $testclass1]) || \
- ("true" == [$test.isvehicleclass $testclass2])} {
-
- # du nodd dschumb indu daed fehickel
- if {([$test.iskilled] == "false") && ([$test.getstate] != "explode")} {
-
- # keine Vehicle schlafengelegter Garagen
- if {"offline" != [$test.getstate]} {
-
- # was gefunden, gleich zurueckgeben
- return $test
- }
- }
- }
- }
-
- if {$do_it == "false"} {
-
- # haben wir den startpunkt erreicht
- if {$anfang == $test} {
-
- set do_it true
- }
- }
- }
-
- return null
- }
-
- # -------------------------------------------------------------------
- # destroyflak: wird aufgerufen, wenn ein flakbuilding explodiert
- # -------------------------------------------------------------------
- proc destroyflak {} {
- set pos [.getproduct 0]
- if { [ /world.getviewercarrier ] == $pos } {
- /game/handler/feedback.registerbuildingdestroyed
- }
- .destroyproduct 0
- }
-
-
- # -------------------------------------------------------------------
- # EOF
- # -------------------------------------------------------------------
-
-